import { fileURLToPath, URL } from 'node:url';

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
// import vueDevTools from 'vite-plugin-vue-devtools';

// 引入自动生成路由
import Pages from 'vite-plugin-pages';

// 引入自动引入Hook
import AutoImport from 'unplugin-auto-import/vite';

// 引入模板布局
import Layouts from 'vite-plugin-vue-layouts-next';

// 引入自动引入组件
import Components from 'unplugin-vue-components/vite';

// 引入路由规则
import { NoNeedLogin, NoNeedTabbar } from './src/routers/rules';

// https://vite.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        // vueDevTools(),
        AutoImport({
            // 指定引入哪些插件
            imports: [
                'vue',
                'vue-router',
                'pinia'
            ],
            // 生成全局自动引入配置文件
            dts: "./src/auto-imports.d.ts",
        }),
        Pages({
            dirs: 'src/views', // 需要生成路由的组件目录
            exclude: ['**/components/*.vue'], // 排除在外的目录，即所有 components 目录下的 .vue 文件都不会生成路由
            // 路由拓展判断
            extendRoute(route, parent)
            {
                // 追加属性
                route = {
                    ...route,
                    meta: {
                        layout: 'Index',
                        IsLogin: true
                    },
                }

                // 不需要底部导航
                if(NoNeedTabbar.includes(route.path))
                {
                    // 关闭模板布局属性
                    route.meta.layout = false;
                }

                // 不需要登录
                if(NoNeedLogin.includes(route.path))
                {
                    // 关闭是否登录属性
                    route.meta.IsLogin = false;
                }
                
                return route;
            }
        }),
        Layouts({
            layoutsDirs: 'src/layouts', // 布局模板文件存放目录
            defaultLayout: 'Index', // 默认布局，对应 src/layout/index.vue
            pagesDirs: 'src/views',// 页面存放目录
        }),
        Components({
            // 指定组件位置，默认是src/components
            dirs: ['src/components'],
            // ui库解析器
            // resolvers: [ElementPlusResolver()],
            extensions: ['vue'],
        })
    ],
    resolve: {
        alias: {
            '@': fileURLToPath(new URL('./src', import.meta.url)),
            // 'components': fileURLToPath(new URL('src/components', import.meta.url)),
            // 'views': fileURLToPath(new URL('src/views', import.meta.url)),
            // 'vue': 'vue/dist/vue.esm-bundler.js', // 定义vue的别名，如果使用其他的插件，可能会用到别名
            // "styles": fileURLToPath(new URL('src/styles', import.meta.url)),
            // "plugins": fileURLToPath(new URL('src/plugins', import.meta.url)),
            // "layouts": fileURLToPath(new URL('src/layouts', import.meta.url)),
            // "utils": fileURLToPath(new URL('src/utils', import.meta.url)),
            // "apis": fileURLToPath(new URL('src/apis', import.meta.url)),
            // "dirs": fileURLToPath(new URL('src/dirs', import.meta.url)),
        },
    },
    server: {
        proxy: {
            //设置代理请求 当代理商识别你的请求如果前缀是 /shop的话 就会自动转移
            '/shop': {
                target: 'http://www.fastadmin.com/shop',
                changeOrigin: true, //跨域
                //替换掉shop前缀 防止多个shop地址
                rewrite: (path) => path.replace(/^\/shop/, ''),
            },
        },
        hmr: {
            overlay: false,
        },
    }
});
